# -*- coding:utf-8 -*-

# @Time    : 2023/9/27 15:13
# @Author  : jinyuhao
# @Email   : jinyuhao@lingxi.ai
# @Software: LLM_internal



# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import os.path
import sys

from common.log import logger
import pandas as pd

# from agent.llm_agent import LLMAgent
from bot.insurance_sales.agent.llm_agent import LLMAgent

default_template = """
作为一个专业的{role},场景是在电话通话中，你的主要任务是根据以下销售流程收集用户信息（年龄、姓氏、用户是否同意参观、为何人考虑养老社区、需要什么房型），销售流程依次是:开场、介绍泰康养老社区并收集用户的年龄、收集用户的姓氏、询问是否同意参观、收集用户是为何人考虑养老社区、向用户介绍并确认用户需要什么样的房型、询问用户对年金险是否有兴趣、向用户说结束语。

注意以下事项：
1.你通话的目的是按照流程，按照顺序依次收集用户的信息。如果当前流程向用户收集的信息未收集到，可以在不引起用户反感的情况下通过下一轮对话来尽可能地收集。
2.你需要分析用户是否真正回答了你的问题，如果用户没有正面回答，需要停在当前流程继续向用户确认。如：询问用户姓氏，用户回复"贵姓啊贵"，则用户没有证明回答。
3.如果用户有连续两轮拒绝、强烈拒绝（连续三次拒绝可认为是强烈拒绝，如："不需要不需要不需要"）、抱怨、不高兴、激动、不耐烦、投诉、骂人、说脏话、报警等负面情绪时，直接进行流程:"向用户说结束语"。
4.以下三种情况命中一项则默认用户是为自己考虑养老社区的，跳过"收集用户是为何人考虑养老社区"这一步流程：（1）用户的父母不在了。（2）用户的父母去世了。（3）用户的年龄大于65岁。
5.如果用户回复内容为"@@quiet@@"，代表用户静音没有说话。如果连续三轮交互用户都为静音，则直接进行直接进行流程:"向用户说结束语"。
6.为了防止用户的反感，同一流程的问题最多连续问用户两次，问两次后进行下一流程。
7.输出结论即可，不需要给出理由。

用户信息如下:
{user_info}

对话记录如下:
===
{conversation_history}
===
基于销售流程和对话记录，你推理出来接下来沟通的销售流程名是：
"""
class SalesSkill(LLMAgent):
    """用户问题及疑议判断机器人"""

    def __init__(self, role, conversation_history, user_info):
        sales_skill_baseinfo: dict = {1: "开场", 2: "介绍泰康养老社区并收集用户的年龄", 3: "收集用户的姓氏", 4: "询问是否同意参观",
                                      5: "收集用户是为何人考虑养老社区", 6: "向用户介绍并确认用户需要什么样的房型",
                                      7: "询问用户对年金险是否有兴趣", 8: "向用户说结束语"}
        self.prompt = default_template.format(role=role, conversation_history=conversation_history, user_info=user_info,
                                              sales_skill_baseinfo=sales_skill_baseinfo)
        super().__init__(self.prompt)


def load_sales_skill_utter():
    currentPath = os.path.dirname(__file__)
    logger.info(currentPath)
    # currentPath = currentPath + "/bot/insurance_sales/knowledge_base/raw_data/流程话术.xlsx"
    currentPath = currentPath + "/../knowledge_base/raw_data/流程话术.xlsx"
    logger.info(currentPath)
    sales_skill_utter = {}
    df = pd.read_excel(currentPath)
    df_group = df.groupby('流程')
    for k, v in df_group:
        trick_type, trick_utter = k, v['话术'].tolist()
        trick_utter_dict = {(i+1): trick_utter[i] for i in range(len(trick_utter))}
        sales_skill_utter[trick_type] = trick_utter_dict
    return sales_skill_utter


sales_skill_utter: dict = load_sales_skill_utter()   # 读入一次，销售技巧 话术语料库


def get_sales_skill_utter(sales_skill_name):
    res_sales_skill_utter_set = sales_skill_utter.get(sales_skill_name, '')
    return res_sales_skill_utter_set
